A snapshot is the state of a system at a particular point in time. A full snapshot of a system may be composed of large amounts of data (e.g., terabytes, petabytes, etc.). Performing a full snapshot of a system at frequent intervals (e.g., hourly, daily) requires large amounts of storage to store the snapshots. To reduce the amount of storage required, an incremental snapshot of the system may be performed between full snapshots. An incremental snapshot includes the changes that have occurred to the system since the previous (full or incremental) snapshot. However, mounting a volume that includes a full snapshot and several incremental snapshots may require large amounts of storage.
For example, suppose a full snapshot of a system comprised of 1 TB of data was performed at t=0 and an incremental snapshot of 100 GB of data was performed at each t, from t=1 to t=10. Some of the data from an incremental snapshot may overwrite the data from the full snapshot and/or a previous incremental snapshot. However, to recover and mount the system at t=10 requires starting from the full snapshot at t=0 and adding each incremental snapshot to the system until the combined snapshots reproduce the state of the system at t=10. In this example, 2 TB of storage is required to recover the system comprised of 1 TB at t=10.
Although the above process reduces the amount of storage required to store the data, it increases the amount of storage needed to recover the data. It would be useful to not only reduce the amount of storage required to store the data, but also to reduce the amount of storage needed to recover the data.